package cn.edu.lcu.cs.javaprogramming.basic.array;

import java.util.Arrays;
import java.util.Random;

/**
 * 成绩数组演示
 * 2022/2/26 23:38
 *
 * @Author ling
 */
public class ScoresArray {

    public static void main(String[] args) {
        // 声明字符串数组并赋值，存储3、4班的班级名称
        // 字面常量
        String[] classes = {"2020级3班", "2020级4班"};
        // 也可以这样定义：String classes[]，不推荐
//        String classes[] = {"2020级3班", "2020级4班"};

        // 遍历打印各班的名称
        // Java中，每个数组都是一个对象，都有length属性
        for (int i = 0; i < classes.length; i++) {
            String clazz = classes[i];
            System.out.println(clazz);
//            System.out.println(classes[i]);
        }

        for (int i = classes.length - 1; i >= 0; i--) {
            System.out.println(classes[i]);
        }

        // for each
        // 如果遍历没有修改数组内容，推荐此种方式
        for (String clazz : classes) {
            System.out.println(clazz);
        }


        // 获取随机生成的成绩数组
        int[] scores = generateScores(84);

        // 输出打印
//        for (int score : scores) {
//            System.out.print(score + "\t");
//        }

        System.out.println(Arrays.toString(scores));
        // 成绩排序后输出
        Arrays.sort(scores);
        System.out.println(Arrays.toString(scores));


    }

    /**
     * 随机生成[0, 100]之间的整数，作为成绩返回。
     * 暂时不必纠结细节，直接调用即可。
     *
     * @return 随机生成的成绩
     */
    private static int generateScore() {
        Random random = new Random();
        int score = random.nextInt(101);
        return score;
    }

    /**
     * 打印数组
     *
     * @param array
     */
    public static void print(int[] array) {
        // 代码填空

    }

    /**
     * 随机生成若干个[0, 100]之间的整数，作为成绩，存储在数组中返回。
     *
     * @param length 数组长度
     * @return 成绩数组
     */
    public static int[] generateScores(int length) {
        // 创建length个元素的整数数组
        int[] scores = new int[length];

        // 遍历这个数组，依次用生成的随机数为数组元素赋值
        for (int i = 0; i < scores.length; i++) {
            scores[i] = generateScore();
        }

        // for each 循环，不能修改数组
//        for (int score : scores) {
//            score = generateScore();
//        }

        // 返回成绩数组
        return scores;
    }
}
